package visao;

import java.util.ArrayList;
import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpSession;

import modelo.Equipe;
import modelo.Jogador;
import controle.ControleJogador;

@ManagedBean(name = "jogadorBean")
@SessionScoped
public class JogadorBean {

	private Jogador jogador = new Jogador();
	private ControleJogador controle = new ControleJogador();
	private List<Jogador> jogadores = new ArrayList<Jogador>();
	private Jogador jogadorSelecionado = new Jogador();
	private List<Equipe> equipes;

	
	public List<Equipe> getEquipes() {
		if(equipes == null){
			equipes = controle.listarEquipes();
		}
		return equipes;
	}

	public void setEquipes(List<Equipe> equipes) {
		this.equipes = equipes;
	}

	public Jogador getJogador() {
		return jogador;
	}

	public void setJogador(Jogador jogador) {
		this.jogador = jogador;
	}

	public ControleJogador getControle() {
		return controle;
	}

	public void setControle(ControleJogador controle) {
		this.controle = controle;
	}

	public List<Jogador> getJogadores() {
		return jogadores;
	}

	public void setJogadores(List<Jogador> jogadores) {
		this.jogadores = jogadores;
	}

	public Jogador getJogadorSelecionado() {
		return jogadorSelecionado;
	}

	public void setJogadorSelecionado(Jogador jogadorSelecionado) {
		this.jogadorSelecionado = jogadorSelecionado;
	}

	/* CRUD */
	public String novo() {
		jogador = new Jogador();
		return "cadastroJogador";
	}

	public String voltar() {
		jogador = new Jogador();
		return "/restrito/indexJogador";
	}

	public String Salvar() {
		
		FacesContext context = FacesContext.getCurrentInstance();
		try {
			controle.salvar(jogador);
			context.addMessage(null, new FacesMessage(
					FacesMessage.SEVERITY_INFO,
					"Jogador Cadastrado com Sucesso!", ""));
			jogador = new Jogador();
		} catch (Exception e) {
			e.printStackTrace();
			context.addMessage(null, new FacesMessage(
					FacesMessage.SEVERITY_ERROR, e.getMessage(), ""));
		}
		return "";
	}

	public String excluir() {
		FacesContext faces = FacesContext.getCurrentInstance();
		ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
		HttpSession session = (HttpSession) externalContext.getSession(true);
		LoginBean loginBean = (LoginBean) session.getAttribute("loginBean");
		if (loginBean == null || !loginBean.isLogado()) {
			faces.addMessage(null,new FacesMessage(FacesMessage.SEVERITY_ERROR,"Voce deve estar logado para acessar essa pagina!",""));
			return "/publico/login";
		}
		FacesContext context = FacesContext.getCurrentInstance();
		try {
			controle.excluir(jogadorSelecionado);
		} catch (Exception e) {
			e.printStackTrace();
			context.addMessage(null, new FacesMessage(
					FacesMessage.SEVERITY_ERROR, e.getMessage(), ""));
			return "";
		}
		return "listarJogador";
	}

	public String alterar() {
		FacesContext faces = FacesContext.getCurrentInstance();
		ExternalContext externalContext = FacesContext.getCurrentInstance().getExternalContext();
		HttpSession session = (HttpSession) externalContext.getSession(true);
		LoginBean loginBean = (LoginBean) session.getAttribute("loginBean");
		if (loginBean == null || !loginBean.isLogado()) {
			faces.addMessage(null,new FacesMessage(FacesMessage.SEVERITY_ERROR,"Voce deve estar logado para acessar essa pagina!",""));
			return "/publico/login";
		}
		this.jogador = this.jogadorSelecionado;
		return "cadastroJogador";
	}

	/* FIM CRUD */
	/* LISTAR */
	public String buscarPorId() {
		FacesContext context = FacesContext.getCurrentInstance();
		try {
			jogador = controle.buscarPorId(jogador.getId());
		} catch (Exception e) {
			e.printStackTrace();
			context.addMessage(null, new FacesMessage(
					FacesMessage.SEVERITY_ERROR, e.getMessage(), ""));
			return "";
		}
		return "listarJogador";
	}

	public String buscarPorNome() {
		FacesContext context = FacesContext.getCurrentInstance();
		try {
			jogadores = controle.buscarPorNome(jogador.getNome());
		} catch (Exception e) {
			e.printStackTrace();
			context.addMessage(null, new FacesMessage(
					FacesMessage.SEVERITY_ERROR, e.getMessage(), ""));
			return "";
		}
		return "listarJogador";
	}

	public String buscarPorEquipe() {
		FacesContext context = FacesContext.getCurrentInstance();
		try {
			jogadores = controle.buscarPorEquipe(jogador.getEquipe());
		} catch (Exception e) {
			e.printStackTrace();
			context.addMessage(null, new FacesMessage(
					FacesMessage.SEVERITY_ERROR, e.getMessage(), ""));
			return "";
		}
		return "listarJogador";
	}

	public String buscarPorPosicao() {
		FacesContext context = FacesContext.getCurrentInstance();
		try {
			jogadores = controle.buscarPorPosicao(jogador.getPosicao());
		} catch (Exception e) {
			e.printStackTrace();
			context.addMessage(null, new FacesMessage(
					FacesMessage.SEVERITY_ERROR, e.getMessage(), ""));
			return "";
		}
		return "listarJogador";
	}

	public String buscarPorNumero() {
		FacesContext context = FacesContext.getCurrentInstance();
		try {
			jogadores = controle.buscarPorNumero(jogador.getNumero());
		} catch (Exception e) {
			e.printStackTrace();
			context.addMessage(null, new FacesMessage(
					FacesMessage.SEVERITY_ERROR, e.getMessage(), ""));
			return "";
		}
		return "listarJogador";
	}

	public String buscarTodos() {
		jogadores = controle.listarTodos();
		return "listarJogador";
	}
	
	public List<Equipe> getEquipe() {
		if (equipes == null) {
			equipes = controle.listarEquipes();
		}
		return equipes;
	}

	/* FIM LISTAR */
}
